package service.locaveis;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;

import model.Categoria;
import model.locaveis.DocumentoCientifico;
import service.GenericDAOImpl;
import enumerations.DocumentoType;

public class DocumentoCientificoDAO extends GenericDAOImpl<DocumentoCientifico> {
	
	public DocumentoCientificoDAO(EntityManager em) {
		super.entityManager = em;
	}
	
	public DocumentoCientifico criaDocumentoCient(Categoria categoria, String nome,
			DocumentoType tipo, ArrayList<String> palavrasChave, 
			byte[] fotoCapa, int totalUnidades) {
		DocumentoCientifico docCient = new DocumentoCientifico();
		docCient.setCategoria(categoria);
		docCient.setNome(nome);
		docCient.setTipo(tipo);
		docCient.setFotoCapa(fotoCapa);
		docCient.setPalavrasChave(palavrasChave);
		docCient.setTotalUnidades(totalUnidades);
		
		insereObjeto(docCient);
		
		return docCient;
	}

	@Override
	public DocumentoCientifico localizaObjeto(Long objId) {
		DocumentoCientifico obj = entityManager.getReference(
				DocumentoCientifico.class, objId);
		return obj;
	}

	@Override
	public List<DocumentoCientifico> listaObjetos() {
		TypedQuery<DocumentoCientifico> query = entityManager.createQuery(
				"SELECT e FROM DocumentoCientifico e", DocumentoCientifico.class);
		return query.getResultList();
	}

	@Override
	public void deletaObjetos() {
		TypedQuery<DocumentoCientifico> query = entityManager.createQuery(
				"DELETE FROM DocumentoCientifico", DocumentoCientifico.class);
		query.executeUpdate();
		
	}

	public boolean verificaDisponibilidade(Long objId) {
		DocumentoCientifico doc = localizaObjeto(objId);
		if(doc != null && doc.getTotalLocados() < doc.getTotalUnidades()) {
			return true;
		}
		return false;
	}

}
